package com.ruoyi.system.service.impl;

import com.ruoyi.system.domain.vo.EnumAggregationVo;
import com.ruoyi.system.enums.BudgetTypeEnum;
import com.ruoyi.system.enums.MaterialCategoryEnum;
import com.ruoyi.system.enums.UseSpaceEnum;
import com.ruoyi.system.enums.UseUnitEnum;
import com.ruoyi.system.service.IEnumService;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 枚举服务实现类
 */
@Service
public class EnumServiceImpl implements IEnumService {

    @Override
    public EnumAggregationVo getAllMaterialEnums() {
        EnumAggregationVo result = new EnumAggregationVo();
        List<EnumAggregationVo.EnumTypeVo> enumTypes = new ArrayList<>();

        // 1. 添加入使用单位枚举（useUnit）
        enumTypes.add(buildEnumType(
                "useUnit",
                "使用单位",
                Arrays.stream(UseUnitEnum.values())
                        .map(e -> new EnumAggregationVo.EnumItemVo(e.getCode(), e.getDesc()))
                        .collect(Collectors.toList())
        ));

        // 2. 添加物料分类枚举（materialCategory）
        enumTypes.add(buildEnumType(
                "materialCategory",
                "物料分类",
                Arrays.stream(MaterialCategoryEnum.values())
                        .map(e -> new EnumAggregationVo.EnumItemVo(e.getCode(), e.getDesc()))
                        .collect(Collectors.toList())
        ));

        // 3. 添加预算类别枚举（budgetType/finalBudgetType）
        enumTypes.add(buildEnumType(
                "budgetType",
                "预算类别",
                Arrays.stream(BudgetTypeEnum.values())
                        .map(e -> new EnumAggregationVo.EnumItemVo(e.getCode(), e.getDesc()))
                        .collect(Collectors.toList())
        ));

        // 4. 添加使用空间枚举（useSpace）
        enumTypes.add(buildEnumType(
                "useSpace",
                "使用空间",
                Arrays.stream(UseSpaceEnum.values())
                        .map(e -> new EnumAggregationVo.EnumItemVo(e.getCode(), e.getDesc()))
                        .collect(Collectors.toList())
        ));



        result.setEnumTypes(enumTypes);
        return result;
    }

    /**
     * 构建单个枚举类型VO
     */
    private EnumAggregationVo.EnumTypeVo buildEnumType(String typeKey, String typeDesc, List<EnumAggregationVo.EnumItemVo> items) {
        return new EnumAggregationVo.EnumTypeVo(typeKey, typeDesc, items);
    }
}
